package com.waitingresult.collection.linked;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @Author: WangShuai
 * @CreateTime: 2022-10-18  13:16
 * @Description:
 * @Version: 1.0
 */
@Data
@NoArgsConstructor
public class MyLinkedList<T> {

    private Node<T> first;
    private Node<T> last;
    private int count;

    public boolean add(T t) {
        //如果是头结点
        if (first == null) {
            Node<T> node = new Node<>();
            node.setPer(null);
            node.setElementData(t);
            node.setNext(null);
            //链表中的当前第一个节点等于node
            first = node;
            //链表中的当前最后一个节点等于node
            last = node;
        }else{
            Node<T> node = new Node<>();
            //设置当前节点的上一个节点 等于最后一个节点
            node.setPer(last);
            node.setElementData(t);
            node.setNext(null);
            last.setNext(null);
            last = node;
        }

        count++;
        return true;
    }

    public int size() {
        return count;
    }
    public boolean isEnmpty(){
        return count == 0;
    }

    /**
     * 双向链表的实现类
     */
    @Data
    @ToString
    private static class Node<T> {
        // 上一个节点
        private Node<T> per;
        // 当前存放数据
        private T elementData;
        // 下一个节点
        private Node<T> next;
    }
}
